和风SDK查询城市ID(保姆级教程)

您所在的位置:网站首页 斐讯r1 配网控制台 和风SDK查询城市ID(保姆级教程)

和风SDK查询城市ID(保姆级教程)

2024-06-30 15:49:55| 来源: 网络整理| 查看: 265

android studio版本:2021.2.1

例程名:hfserachcityid

这几天没什么事做,而且我原来那个“项目”因为免费api不能用了,只能改为和风的免费api,但需要申请,而且还要城市ID,玩天气的基本都知道城市ID这个东西,之前我找到一个在网页上查询城市 ID的网址,但现在也用不了了(目前和风网页版又可以使用了,地址:位置搜索服务 | 和风天气 2023.3.3 又不能用了,见鬼了。2023.3.4),我记得好像还哪里可以查,但不记得了。既然和风也可以查,就再做个app不就行了,其实也可以把代码 放到我那个“项目”里,这事以后再说。而且还可以顺便学点东西,我肯定会遇到问题的,解决的过程就是学习的过程。可没想到这个东西还真给我找了不少麻烦,也算学到了东西。我之前做过一个“andriod 和风天气SDK获取实时天气(保姆级教程)”,我原本想这不是一样吗?代码都不用大的改动,其实不一样,而且我现在怀疑那个教程的代码还能不能用,我真想不通,代码干嘛改动那么大?这样以前做的东西不都用不了?算了,生气也没用。先说说两个为难我的地方。

这个东西获取的城市数据是List这种格式(相关数据格式见:城市搜索 for Android | 和风天气开发服务),我以为是list,于是按照list的获取值方法好一顿折腾,就是不成功,原来获取天气的时候就很简单,而且当时还提供例程代码,现在好了,例程代码也没有了,只能一遍遍试, 因为我真不会啊。而且原来获取天气的代码搬过来没好使。折腾我好几天。

在获取天气的时候,直接可以在代码里面修改ui界面,在这里不行,settext出现致命错误:Only the original thread that created a view hierarchy can touch its views.一查才知道不可以在非ui线程更新ui线程(其实我哪里知道,后来才知道是这么回事。)于是又查解决办法,书到用时方恨少啊。

好了,剩下的就是如何完整的做这个app了。

重要:申请key之前先建立项目,项目的package name(包名)要用,不建立项目没有这个名称,或者后建立项目的时候用这个名也行。

一、申请免费和风key.

 网址:登录 | 和风天气

注册略。

登录后进入“和风天气开发者控制台”

点击左侧"项目管理":

进入后点击右侧"添加key"进入下图(上图只是演示,和风只能申请3个免费KEY):选择“android SDK”,key的名称随便写,package name "必须"与你的app 一致,否则无法获取数据。(下面有提示如何获取package name,一般类似com.example.nothing这样。)

点击创建后如下图,就得到了key 和public id.这两个在代码里和风初始化的时候都要用到。

至此和风免费key申请完成,此key每天有1000次免费访问,足够了。

二、新建项目。(android studio2021.2.1)

file-new-newproject后如下图:选择empty activity.

next后:

项目名称自选,我写的nothing是为了配合刚才那个和风key.最下面的minimumsdk是指最小兼容版本,看个人需要,这个以后也可以改。点finish完成。

三、项目配置:

城市搜索开发文档:城市搜索 for Android | 和风天气开发服务

sdk下载:Android SDK配置 | 和风天气开发服务

把下载的sdk文件放到下图的文件夹内:libs必须在project模式下才能看到,可以在系统“文件管理器”打开如下路径:AndroidStudioProjects\nothing\app\libs。

在android studio内打开文件夹在sdk文件上右键,点击最下面add as library完成sdk导入。

添加权限。打开:androidmanafest.xml文件

添加如下权限:

权限意义:

权限添加androidmanafest.xml位置如图示:

引用库。打开如下图build gradle文件,添加如下库:

compile 'com.squareup.okhttp3:okhttp:3.12.12' (3.12.12+) compile 'com.google.code.gson:gson:2.6.2' (2.6.2+)

至此项目配置完成。

四、项目代码。主要部分都有注释。注意本代码不是nothing的代码,注意包名。

activity_main.xml(布局根据个人喜好,下面是我使用的相对布局)

mainactivity.java

package com.example.hfserachcityid; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.google.gson.Gson; import com.qweather.sdk.bean.base.Code; import com.qweather.sdk.bean.geo.GeoBean; import com.qweather.sdk.view.HeConfig; import com.qweather.sdk.view.QWeather; public class MainActivity extends AppCompatActivity { public TextView viewname,viewid,viewarea,viewarea1; private EditText inputcity; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewname=(TextView)findViewById(R.id.cityname1); viewid=(TextView)findViewById(R.id.cityid1); viewarea=(TextView)findViewById(R.id.area); viewarea1=(TextView)findViewById(R.id.area1); inputcity=(EditText)findViewById(R.id.input); button=(Button)findViewById(R.id.button); //和风初始化 HeConfig.init("HE2303010152481612", "3cbc9266e3b24f38afbf182611fc3de4"); HeConfig.switchToDevService(); //按钮监听 button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //此处注意,gettext的值如果为空,不可以用inputcity.gettext().tostring()=="",此值永远非空。 //只能用equals,如果有值可以用==方式。 String string="";                 //如果为空值无动作,非空开始查询。 if(string.equals(inputcity.getText().toString())){ }else{ getCity(); } } }); }     //获取数据及解析关键代码 public void getCity(){         //获取输入框内容 String inputct =inputcity.getText().toString(); //此方法为和风提供 QWeather.getGeoCityLookup(MainActivity.this, inputct, new QWeather.OnResultGeoListener(){ public static final String TAG="he_feng_city";             //如果提供数据有问题显示                      @Override public void onError(Throwable e) { Log.i(TAG, "onError: ", e); System.out.println("Weather Now Error:"+new Gson()); }             //如果返回结果正确则执行 @Override public void onSuccess(GeoBean geoBean) { if (Code.OK == geoBean.getCode()) {//getLocationBean String id=geoBean.getLocationBean().get(0).getId(); String name=geoBean.getLocationBean().get(0).getName(); String adm2=geoBean.getLocationBean().get(0).getAdm2(); String adm1=geoBean.getLocationBean().get(0).getAdm1(); //因不可以在非ui线程修改ui线程内容,所以必须使用runOnUiThread或类似方法。 //直接使用viewname.setText(name);会导致错误,程序退出。 runOnUiThread(new Runnable() { @Override public void run() { viewname.setText(name); viewid.setText(id); viewarea1.setText(adm1); viewarea.setText(adm2); } }); }else{ //在此查看返回数据失败的原因 Code code = geoBean.getCode(); System.out.println("失败代码: " + code); //Log.i(TAG, "failed code: " + code); } } }); } }

动图演示:



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭